{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "8fe19b15",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy\n",
    "import matplotlib.pyplot as plt\n",
    "from pandas import read_csv\n",
    "import math\n",
    "from keras.models import Sequential\n",
    "from keras.layers import Dense\n",
    "from keras.layers import LSTM\n",
    "from sklearn.preprocessing import MinMaxScaler\n",
    "from sklearn.metrics import mean_squared_error\n",
    "from pandas import concat\n",
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "d273afaa",
   "metadata": {},
   "outputs": [],
   "source": [
    "from pandas import read_csv\n",
    "from datetime import datetime\n",
    "# load data\n",
    "dataset = read_csv('da01_min.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "8f931387",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    ����ʱ��  �й�������Сֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/1/1         51526.5690   1     1        1          1        1     1   \n",
      "1  2019/1/2         63638.4294   1     2        2          1        2     1   \n",
      "2  2019/1/3        102048.2754   1     3        3          1        3     1   \n",
      "3  2019/1/4        104466.0762   1     4        4          1        4     1   \n",
      "4  2019/1/5         99507.3528   1     5        5          1        5     1   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       1       0      1      0         0      3.0    12.0       7.0   \n",
      "1       0       0      0      0         0      5.0    11.0       6.0   \n",
      "2       0       0      0      0         0      2.0    15.0       9.0   \n",
      "3       0       0      0      0         0      3.0    17.0      12.0   \n",
      "4       0       0      0      0         1      3.0    17.0      12.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "2543c3f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "# manually specify column names\n",
    "#dataset.drop('Unnamed: 0 ', axis=1, inplace=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "82c5bfba",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "    ����ʱ��  �й�������Сֵ��kw��  ��  ��.1  һ��ڼ���  һ��ڼ���.1  weekday  ����  \\\n",
      "0  2019/1/1         51526.5690   1     1        1          1        1     1   \n",
      "1  2019/1/2         63638.4294   1     2        2          1        2     1   \n",
      "2  2019/1/3        102048.2754   1     3        3          1        3     1   \n",
      "3  2019/1/4        104466.0762   1     4        4          1        4     1   \n",
      "4  2019/1/5         99507.3528   1     5        5          1        5     1   \n",
      "\n",
      "   �Ƿ��³�  �Ƿ���ĩ  �Ƿ񼾽ڳ�  �Ƿ񼾽�ĩ  �Ƿ���ĩ.1  ����״��  ����¶�  ����¶�.1  \\\n",
      "0       1       0      1      0         0      3.0    12.0       7.0   \n",
      "1       0       0      0      0         0      5.0    11.0       6.0   \n",
      "2       0       0      0      0         0      2.0    15.0       9.0   \n",
      "3       0       0      0      0         0      3.0    17.0      12.0   \n",
      "4       0       0      0      0         1      3.0    17.0      12.0   \n",
      "\n",
      "   �����������  ҹ����������  \n",
      "0         11.0          8.0  \n",
      "1         11.0          8.0  \n",
      "2         11.0          8.0  \n",
      "3         11.0          8.0  \n",
      "4         11.0          8.0  \n"
     ]
    }
   ],
   "source": [
    "print(dataset.head(5))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b9af4d79",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.columns = ['数据时间','有功功率最大值（kw）','月','天','一年第几天','一年第几周','weekday','季节','是否月初','是否月末','是否季节初','是否季节末','是否周末','天气状况','最高温度','最低温度','白天风力风向','夜晚风力风向']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "7424ebc2",
   "metadata": {},
   "outputs": [],
   "source": [
    "dataset.drop('数据时间', axis=1, inplace=True)\n",
    "# summarize first 5 rows\n",
    "#print(dataset.head(5))\n",
    "# save to file\n",
    "dataset.to_csv('power.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "3a01e663",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "       有功功率最大值（kw）   月   天  一年第几天  一年第几周  weekday  季节  是否月初  是否月末  是否季节初  \\\n",
      "0      51526.56900   1   1      1      1        1   1     1     0      1   \n",
      "1      63638.42940   1   2      2      1        2   1     0     0      0   \n",
      "2     102048.27540   1   3      3      1        3   1     0     0      0   \n",
      "3     104466.07620   1   4      4      1        4   1     0     0      0   \n",
      "4      99507.35280   1   5      5      1        5   1     0     0      0   \n",
      "...            ...  ..  ..    ...    ...      ...  ..   ...   ...    ...   \n",
      "1060   94921.31352  11  26    330     47        4   4     0     0      0   \n",
      "1061   95399.21256  11  27    331     47        5   4     0     0      0   \n",
      "1062   94366.49616  11  28    332     47        6   4     0     0      0   \n",
      "1063   89774.21316  11  29    333     48        0   4     0     0      0   \n",
      "1064   90599.10912  11  30    334     48        1   4     0     1      0   \n",
      "\n",
      "      是否季节末  是否周末  天气状况   最高温度   最低温度  白天风力风向  夜晚风力风向  \n",
      "0         0     0  3.00  12.00   7.00   11.00    8.00  \n",
      "1         0     0  5.00  11.00   6.00   11.00    8.00  \n",
      "2         0     0  2.00  15.00   9.00   11.00    8.00  \n",
      "3         0     0  3.00  17.00  12.00   11.00    8.00  \n",
      "4         0     1  3.00  17.00  12.00   11.00    8.00  \n",
      "...     ...   ...   ...    ...    ...     ...     ...  \n",
      "1060      0     0  2.00  25.80  16.35   15.20   12.20  \n",
      "1061      0     1  2.00  23.65  15.30   19.40   16.40  \n",
      "1062      0     1  1.15  21.40  13.50   21.15   18.15  \n",
      "1063      0     0  1.85  22.05  13.65   15.20   12.20  \n",
      "1064      0     0  1.15  22.50  14.20   20.40   17.40  \n",
      "\n",
      "[1065 rows x 17 columns]\n"
     ]
    }
   ],
   "source": [
    "print(dataset)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "4c4e13a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "<bound method NDFrame.head of       var1(t-1)  var2(t-1)  var3(t-1)  var4(t-1)  var5(t-1)  var6(t-1)  \\\n",
      "1      0.441537   0.000000   0.000000   0.000000   0.000000   0.166667   \n",
      "2      0.545331   0.000000   0.033333   0.002740   0.000000   0.333333   \n",
      "3      0.874487   0.000000   0.066667   0.005479   0.000000   0.500000   \n",
      "4      0.895206   0.000000   0.100000   0.008219   0.000000   0.666667   \n",
      "5      0.852712   0.000000   0.133333   0.010959   0.000000   0.833333   \n",
      "...         ...        ...        ...        ...        ...        ...   \n",
      "1060   0.838598   0.909091   0.800000   0.898630   0.884615   0.500000   \n",
      "1061   0.813412   0.909091   0.833333   0.901370   0.884615   0.666667   \n",
      "1062   0.817507   0.909091   0.866667   0.904110   0.884615   0.833333   \n",
      "1063   0.808657   0.909091   0.900000   0.906849   0.884615   1.000000   \n",
      "1064   0.769303   0.909091   0.933333   0.909589   0.903846   0.000000   \n",
      "\n",
      "      var7(t-1)  var8(t-1)  var9(t-1)  var10(t-1)  var11(t-1)  var12(t-1)  \\\n",
      "1           0.0        1.0        0.0         1.0         0.0         0.0   \n",
      "2           0.0        0.0        0.0         0.0         0.0         0.0   \n",
      "3           0.0        0.0        0.0         0.0         0.0         0.0   \n",
      "4           0.0        0.0        0.0         0.0         0.0         0.0   \n",
      "5           0.0        0.0        0.0         0.0         0.0         1.0   \n",
      "...         ...        ...        ...         ...         ...         ...   \n",
      "1060        1.0        0.0        0.0         0.0         0.0         0.0   \n",
      "1061        1.0        0.0        0.0         0.0         0.0         0.0   \n",
      "1062        1.0        0.0        0.0         0.0         0.0         1.0   \n",
      "1063        1.0        0.0        0.0         0.0         0.0         1.0   \n",
      "1064        1.0        0.0        0.0         0.0         0.0         0.0   \n",
      "\n",
      "      var13(t-1)  var14(t-1)  var15(t-1)  var16(t-1)  var17(t-1)   var1(t)  \n",
      "1        0.25000    0.071429    0.153846    0.000000    0.000000  0.545331  \n",
      "2        0.50000    0.035714    0.115385    0.000000    0.000000  0.874487  \n",
      "3        0.12500    0.178571    0.230769    0.000000    0.000000  0.895206  \n",
      "4        0.25000    0.250000    0.346154    0.000000    0.000000  0.852712  \n",
      "5        0.25000    0.250000    0.346154    0.000000    0.000000  0.794826  \n",
      "...          ...         ...         ...         ...         ...       ...  \n",
      "1060     0.11250    0.594643    0.569231    0.634375    0.634375  0.813412  \n",
      "1061     0.12500    0.564286    0.513462    0.262500    0.262500  0.817507  \n",
      "1062     0.12500    0.487500    0.473077    0.525000    0.525000  0.808657  \n",
      "1063     0.01875    0.407143    0.403846    0.634375    0.634375  0.769303  \n",
      "1064     0.10625    0.430357    0.409615    0.262500    0.262500  0.776372  \n",
      "\n",
      "[1064 rows x 18 columns]>\n"
     ]
    }
   ],
   "source": [
    "# prepare data for lstm\n",
    "from pandas import DataFrame\n",
    "from pandas import concat\n",
    "from sklearn.preprocessing import LabelEncoder\n",
    "\n",
    "# convert series to supervised learning\n",
    "def series_to_supervised(data, n_in=1, n_out=1, dropnan=True):\n",
    "    n_vars = 1 if type(data) is list else data.shape[1]\n",
    "    df = DataFrame(data)\n",
    "    cols, names = list(), list()\n",
    "    # input sequence (t-n, ... t-1)\n",
    "    for i in range(n_in, 0, -1):\n",
    "        cols.append(df.shift(i))\n",
    "        names += [('var%d(t-%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # forecast sequence (t, t+1, ... t+n)\n",
    "    for i in range(0, n_out):\n",
    "        cols.append(df.shift(-i))\n",
    "        if i == 0:\n",
    "            names += [('var%d(t)' % (j+1)) for j in range(n_vars)]\n",
    "        else:\n",
    "            names += [('var%d(t+%d)' % (j+1, i)) for j in range(n_vars)]\n",
    "    # put it all together\n",
    "    agg = concat(cols, axis=1)\n",
    "    agg.columns = names\n",
    "    # drop rows with NaN values\n",
    "    if dropnan:\n",
    "        agg.dropna(inplace=True)\n",
    "    return agg\n",
    "\n",
    "# load dataset\n",
    "dataset = read_csv('power.csv', header=0, index_col=0)\n",
    "values = dataset.values\n",
    "# integer encode direction\n",
    "encoder = LabelEncoder()\n",
    "values[:,4] = encoder.fit_transform(values[:,4])\n",
    "# ensure all data is float\n",
    "values = values.astype('float32')\n",
    "# normalize features\n",
    "scaler = MinMaxScaler(feature_range=(0, 1))\n",
    "scaled = scaler.fit_transform(values)\n",
    "# frame as supervised learning\n",
    "reframed = series_to_supervised(scaled, 1, 1)\n",
    "# drop columns we don't want to predict\n",
    "reframed.drop(reframed.columns[[18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]], axis=1, inplace=True)\n",
    "#print(reframed.head())\n",
    "print(reframed.head)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "31d34811",
   "metadata": {},
   "outputs": [],
   "source": [
    "#plt.plot(reframed)\n",
    "#plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "b8a051ee",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(973, 1, 17) (973,) (91, 1, 17) (91,)\n"
     ]
    }
   ],
   "source": [
    "...\n",
    "# split into train and test sets\n",
    "values = reframed.values\n",
    "n_train_hours = int(len(reframed)-91)\n",
    "train = values[:n_train_hours, :]\n",
    "test = values[n_train_hours:, :]\n",
    "# split into input and outputs\n",
    "train_X, train_y = train[:, :-1], train[:, -1]\n",
    "test_X, test_y = test[:, :-1], test[:, -1]\n",
    "# reshape input to be 3D [samples, timesteps, features]\n",
    "train_X = train_X.reshape((train_X.shape[0], 1, train_X.shape[1]))\n",
    "test_X = test_X.reshape((test_X.shape[0], 1, test_X.shape[1]))\n",
    "print(train_X.shape, train_y.shape, test_X.shape, test_y.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "f1dfb13d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch 1/100\n",
      "14/14 - 1s - loss: 0.6013 - val_loss: 0.5549 - 1s/epoch - 98ms/step\n",
      "Epoch 2/100\n",
      "14/14 - 0s - loss: 0.3866 - val_loss: 0.2660 - 29ms/epoch - 2ms/step\n",
      "Epoch 3/100\n",
      "14/14 - 0s - loss: 0.2192 - val_loss: 0.1001 - 30ms/epoch - 2ms/step\n",
      "Epoch 4/100\n",
      "14/14 - 0s - loss: 0.1756 - val_loss: 0.1057 - 30ms/epoch - 2ms/step\n",
      "Epoch 5/100\n",
      "14/14 - 0s - loss: 0.1544 - val_loss: 0.0777 - 29ms/epoch - 2ms/step\n",
      "Epoch 6/100\n",
      "14/14 - 0s - loss: 0.1529 - val_loss: 0.0701 - 31ms/epoch - 2ms/step\n",
      "Epoch 7/100\n",
      "14/14 - 0s - loss: 0.1434 - val_loss: 0.0667 - 30ms/epoch - 2ms/step\n",
      "Epoch 8/100\n",
      "14/14 - 0s - loss: 0.1375 - val_loss: 0.0627 - 31ms/epoch - 2ms/step\n",
      "Epoch 9/100\n",
      "14/14 - 0s - loss: 0.1338 - val_loss: 0.0617 - 30ms/epoch - 2ms/step\n",
      "Epoch 10/100\n",
      "14/14 - 0s - loss: 0.1308 - val_loss: 0.0597 - 30ms/epoch - 2ms/step\n",
      "Epoch 11/100\n",
      "14/14 - 0s - loss: 0.1289 - val_loss: 0.0597 - 29ms/epoch - 2ms/step\n",
      "Epoch 12/100\n",
      "14/14 - 0s - loss: 0.1267 - val_loss: 0.0584 - 30ms/epoch - 2ms/step\n",
      "Epoch 13/100\n",
      "14/14 - 0s - loss: 0.1252 - val_loss: 0.0588 - 30ms/epoch - 2ms/step\n",
      "Epoch 14/100\n",
      "14/14 - 0s - loss: 0.1232 - val_loss: 0.0575 - 30ms/epoch - 2ms/step\n",
      "Epoch 15/100\n",
      "14/14 - 0s - loss: 0.1217 - val_loss: 0.0578 - 30ms/epoch - 2ms/step\n",
      "Epoch 16/100\n",
      "14/14 - 0s - loss: 0.1199 - val_loss: 0.0569 - 28ms/epoch - 2ms/step\n",
      "Epoch 17/100\n",
      "14/14 - 0s - loss: 0.1183 - val_loss: 0.0567 - 29ms/epoch - 2ms/step\n",
      "Epoch 18/100\n",
      "14/14 - 0s - loss: 0.1167 - val_loss: 0.0563 - 29ms/epoch - 2ms/step\n",
      "Epoch 19/100\n",
      "14/14 - 0s - loss: 0.1151 - val_loss: 0.0562 - 28ms/epoch - 2ms/step\n",
      "Epoch 20/100\n",
      "14/14 - 0s - loss: 0.1134 - val_loss: 0.0558 - 30ms/epoch - 2ms/step\n",
      "Epoch 21/100\n",
      "14/14 - 0s - loss: 0.1118 - val_loss: 0.0557 - 29ms/epoch - 2ms/step\n",
      "Epoch 22/100\n",
      "14/14 - 0s - loss: 0.1102 - val_loss: 0.0555 - 30ms/epoch - 2ms/step\n",
      "Epoch 23/100\n",
      "14/14 - 0s - loss: 0.1086 - val_loss: 0.0555 - 29ms/epoch - 2ms/step\n",
      "Epoch 24/100\n",
      "14/14 - 0s - loss: 0.1070 - val_loss: 0.0555 - 29ms/epoch - 2ms/step\n",
      "Epoch 25/100\n",
      "14/14 - 0s - loss: 0.1054 - val_loss: 0.0554 - 29ms/epoch - 2ms/step\n",
      "Epoch 26/100\n",
      "14/14 - 0s - loss: 0.1039 - val_loss: 0.0554 - 29ms/epoch - 2ms/step\n",
      "Epoch 27/100\n",
      "14/14 - 0s - loss: 0.1025 - val_loss: 0.0554 - 29ms/epoch - 2ms/step\n",
      "Epoch 28/100\n",
      "14/14 - 0s - loss: 0.1008 - val_loss: 0.0558 - 27ms/epoch - 2ms/step\n",
      "Epoch 29/100\n",
      "14/14 - 0s - loss: 0.0995 - val_loss: 0.0557 - 28ms/epoch - 2ms/step\n",
      "Epoch 30/100\n",
      "14/14 - 0s - loss: 0.0979 - val_loss: 0.0557 - 27ms/epoch - 2ms/step\n",
      "Epoch 31/100\n",
      "14/14 - 0s - loss: 0.0963 - val_loss: 0.0557 - 31ms/epoch - 2ms/step\n",
      "Epoch 32/100\n",
      "14/14 - 0s - loss: 0.0948 - val_loss: 0.0561 - 23ms/epoch - 2ms/step\n",
      "Epoch 33/100\n",
      "14/14 - 0s - loss: 0.0936 - val_loss: 0.0557 - 33ms/epoch - 2ms/step\n",
      "Epoch 34/100\n",
      "14/14 - 0s - loss: 0.0925 - val_loss: 0.0558 - 30ms/epoch - 2ms/step\n",
      "Epoch 35/100\n",
      "14/14 - 0s - loss: 0.0909 - val_loss: 0.0567 - 27ms/epoch - 2ms/step\n",
      "Epoch 36/100\n",
      "14/14 - 0s - loss: 0.0899 - val_loss: 0.0560 - 35ms/epoch - 3ms/step\n",
      "Epoch 37/100\n",
      "14/14 - 0s - loss: 0.0888 - val_loss: 0.0555 - 33ms/epoch - 2ms/step\n",
      "Epoch 38/100\n",
      "14/14 - 0s - loss: 0.0874 - val_loss: 0.0557 - 32ms/epoch - 2ms/step\n",
      "Epoch 39/100\n",
      "14/14 - 0s - loss: 0.0864 - val_loss: 0.0565 - 31ms/epoch - 2ms/step\n",
      "Epoch 40/100\n",
      "14/14 - 0s - loss: 0.0857 - val_loss: 0.0589 - 32ms/epoch - 2ms/step\n",
      "Epoch 41/100\n",
      "14/14 - 0s - loss: 0.0852 - val_loss: 0.0562 - 32ms/epoch - 2ms/step\n",
      "Epoch 42/100\n",
      "14/14 - 0s - loss: 0.0838 - val_loss: 0.0559 - 29ms/epoch - 2ms/step\n",
      "Epoch 43/100\n",
      "14/14 - 0s - loss: 0.0831 - val_loss: 0.0561 - 32ms/epoch - 2ms/step\n",
      "Epoch 44/100\n",
      "14/14 - 0s - loss: 0.0820 - val_loss: 0.0618 - 31ms/epoch - 2ms/step\n",
      "Epoch 45/100\n",
      "14/14 - 0s - loss: 0.0832 - val_loss: 0.0640 - 33ms/epoch - 2ms/step\n",
      "Epoch 46/100\n",
      "14/14 - 0s - loss: 0.0823 - val_loss: 0.0576 - 31ms/epoch - 2ms/step\n",
      "Epoch 47/100\n",
      "14/14 - 0s - loss: 0.0802 - val_loss: 0.0576 - 31ms/epoch - 2ms/step\n",
      "Epoch 48/100\n",
      "14/14 - 0s - loss: 0.0805 - val_loss: 0.0568 - 29ms/epoch - 2ms/step\n",
      "Epoch 49/100\n",
      "14/14 - 0s - loss: 0.0795 - val_loss: 0.0687 - 32ms/epoch - 2ms/step\n",
      "Epoch 50/100\n",
      "14/14 - 0s - loss: 0.0847 - val_loss: 0.0749 - 31ms/epoch - 2ms/step\n",
      "Epoch 51/100\n",
      "14/14 - 0s - loss: 0.0837 - val_loss: 0.0611 - 30ms/epoch - 2ms/step\n",
      "Epoch 52/100\n",
      "14/14 - 0s - loss: 0.0808 - val_loss: 0.0662 - 30ms/epoch - 2ms/step\n",
      "Epoch 53/100\n",
      "14/14 - 0s - loss: 0.0808 - val_loss: 0.0599 - 32ms/epoch - 2ms/step\n",
      "Epoch 54/100\n",
      "14/14 - 0s - loss: 0.0819 - val_loss: 0.0778 - 32ms/epoch - 2ms/step\n",
      "Epoch 55/100\n",
      "14/14 - 0s - loss: 0.0842 - val_loss: 0.0584 - 31ms/epoch - 2ms/step\n",
      "Epoch 56/100\n",
      "14/14 - 0s - loss: 0.0769 - val_loss: 0.0655 - 30ms/epoch - 2ms/step\n",
      "Epoch 57/100\n",
      "14/14 - 0s - loss: 0.0805 - val_loss: 0.0571 - 33ms/epoch - 2ms/step\n",
      "Epoch 58/100\n",
      "14/14 - 0s - loss: 0.0771 - val_loss: 0.0814 - 33ms/epoch - 2ms/step\n",
      "Epoch 59/100\n",
      "14/14 - 0s - loss: 0.0856 - val_loss: 0.0695 - 29ms/epoch - 2ms/step\n",
      "Epoch 60/100\n",
      "14/14 - 0s - loss: 0.0812 - val_loss: 0.0834 - 30ms/epoch - 2ms/step\n",
      "Epoch 61/100\n",
      "14/14 - 0s - loss: 0.0874 - val_loss: 0.0589 - 28ms/epoch - 2ms/step\n",
      "Epoch 62/100\n",
      "14/14 - 0s - loss: 0.0790 - val_loss: 0.0832 - 27ms/epoch - 2ms/step\n",
      "Epoch 63/100\n",
      "14/14 - 0s - loss: 0.0880 - val_loss: 0.0709 - 28ms/epoch - 2ms/step\n",
      "Epoch 64/100\n",
      "14/14 - 0s - loss: 0.0830 - val_loss: 0.0806 - 28ms/epoch - 2ms/step\n",
      "Epoch 65/100\n",
      "14/14 - 0s - loss: 0.0858 - val_loss: 0.0582 - 28ms/epoch - 2ms/step\n",
      "Epoch 66/100\n",
      "14/14 - 0s - loss: 0.0771 - val_loss: 0.0780 - 30ms/epoch - 2ms/step\n",
      "Epoch 67/100\n",
      "14/14 - 0s - loss: 0.0838 - val_loss: 0.0673 - 28ms/epoch - 2ms/step\n",
      "Epoch 68/100\n",
      "14/14 - 0s - loss: 0.0797 - val_loss: 0.0736 - 30ms/epoch - 2ms/step\n",
      "Epoch 69/100\n",
      "14/14 - 0s - loss: 0.0817 - val_loss: 0.0580 - 39ms/epoch - 3ms/step\n",
      "Epoch 70/100\n",
      "14/14 - 0s - loss: 0.0760 - val_loss: 0.0766 - 29ms/epoch - 2ms/step\n",
      "Epoch 71/100\n",
      "14/14 - 0s - loss: 0.0826 - val_loss: 0.0665 - 28ms/epoch - 2ms/step\n",
      "Epoch 72/100\n",
      "14/14 - 0s - loss: 0.0791 - val_loss: 0.0756 - 28ms/epoch - 2ms/step\n",
      "Epoch 73/100\n",
      "14/14 - 0s - loss: 0.0820 - val_loss: 0.0579 - 27ms/epoch - 2ms/step\n",
      "Epoch 74/100\n",
      "14/14 - 0s - loss: 0.0748 - val_loss: 0.0751 - 30ms/epoch - 2ms/step\n",
      "Epoch 75/100\n",
      "14/14 - 0s - loss: 0.0814 - val_loss: 0.0647 - 32ms/epoch - 2ms/step\n",
      "Epoch 76/100\n",
      "14/14 - 0s - loss: 0.0772 - val_loss: 0.0742 - 31ms/epoch - 2ms/step\n",
      "Epoch 77/100\n",
      "14/14 - 0s - loss: 0.0800 - val_loss: 0.0580 - 31ms/epoch - 2ms/step\n",
      "Epoch 78/100\n",
      "14/14 - 0s - loss: 0.0738 - val_loss: 0.0715 - 31ms/epoch - 2ms/step\n",
      "Epoch 79/100\n",
      "14/14 - 0s - loss: 0.0796 - val_loss: 0.0631 - 30ms/epoch - 2ms/step\n",
      "Epoch 80/100\n",
      "14/14 - 0s - loss: 0.0755 - val_loss: 0.0715 - 32ms/epoch - 2ms/step\n",
      "Epoch 81/100\n",
      "14/14 - 0s - loss: 0.0781 - val_loss: 0.0584 - 29ms/epoch - 2ms/step\n",
      "Epoch 82/100\n",
      "14/14 - 0s - loss: 0.0728 - val_loss: 0.0690 - 31ms/epoch - 2ms/step\n",
      "Epoch 83/100\n",
      "14/14 - 0s - loss: 0.0774 - val_loss: 0.0638 - 31ms/epoch - 2ms/step\n",
      "Epoch 84/100\n",
      "14/14 - 0s - loss: 0.0748 - val_loss: 0.0687 - 31ms/epoch - 2ms/step\n",
      "Epoch 85/100\n",
      "14/14 - 0s - loss: 0.0775 - val_loss: 0.0585 - 31ms/epoch - 2ms/step\n",
      "Epoch 86/100\n",
      "14/14 - 0s - loss: 0.0728 - val_loss: 0.0677 - 30ms/epoch - 2ms/step\n",
      "Epoch 87/100\n",
      "14/14 - 0s - loss: 0.0768 - val_loss: 0.0655 - 29ms/epoch - 2ms/step\n",
      "Epoch 88/100\n",
      "14/14 - 0s - loss: 0.0754 - val_loss: 0.0681 - 29ms/epoch - 2ms/step\n",
      "Epoch 89/100\n",
      "14/14 - 0s - loss: 0.0769 - val_loss: 0.0594 - 29ms/epoch - 2ms/step\n",
      "Epoch 90/100\n",
      "14/14 - 0s - loss: 0.0731 - val_loss: 0.0682 - 28ms/epoch - 2ms/step\n",
      "Epoch 91/100\n",
      "14/14 - 0s - loss: 0.0768 - val_loss: 0.0658 - 31ms/epoch - 2ms/step\n",
      "Epoch 92/100\n",
      "14/14 - 0s - loss: 0.0756 - val_loss: 0.0688 - 31ms/epoch - 2ms/step\n",
      "Epoch 93/100\n",
      "14/14 - 0s - loss: 0.0772 - val_loss: 0.0589 - 30ms/epoch - 2ms/step\n",
      "Epoch 94/100\n",
      "14/14 - 0s - loss: 0.0725 - val_loss: 0.0666 - 29ms/epoch - 2ms/step\n",
      "Epoch 95/100\n",
      "14/14 - 0s - loss: 0.0757 - val_loss: 0.0651 - 30ms/epoch - 2ms/step\n",
      "Epoch 96/100\n",
      "14/14 - 0s - loss: 0.0748 - val_loss: 0.0661 - 30ms/epoch - 2ms/step\n",
      "Epoch 97/100\n",
      "14/14 - 0s - loss: 0.0758 - val_loss: 0.0594 - 31ms/epoch - 2ms/step\n",
      "Epoch 98/100\n",
      "14/14 - 0s - loss: 0.0723 - val_loss: 0.0666 - 31ms/epoch - 2ms/step\n",
      "Epoch 99/100\n",
      "14/14 - 0s - loss: 0.0753 - val_loss: 0.0655 - 30ms/epoch - 2ms/step\n",
      "Epoch 100/100\n",
      "14/14 - 0s - loss: 0.0746 - val_loss: 0.0665 - 31ms/epoch - 2ms/step\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "...\n",
    "# design network\n",
    "model = Sequential()\n",
    "model.add(LSTM(50, input_shape=(train_X.shape[1], train_X.shape[2])))\n",
    "model.add(Dense(1))\n",
    "model.compile(loss='mae', optimizer='adam')\n",
    "# fit network\n",
    "history = model.fit(train_X, train_y, epochs=100, batch_size=72, validation_data=(test_X, test_y), verbose=2, shuffle=False)\n",
    "# plot history\n",
    "plt.plot(history.history['loss'], label='train')\n",
    "plt.plot(history.history['val_loss'], label='test')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "64a0d2b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# make predictions\n",
    "#trainPredict = model.predict(train_X)\n",
    "#testPredict = model.predict(test_X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "7c7a3607",
   "metadata": {},
   "outputs": [],
   "source": [
    "...\n",
    "# make a prediction\n",
    "yhat = model.predict(test_X)\n",
    "test_X = test_X.reshape((test_X.shape[0], test_X.shape[2]))\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "2e095d4f",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(91, 1) (91, 17)\n"
     ]
    }
   ],
   "source": [
    "yhat=DataFrame(yhat)\n",
    "test_X=DataFrame(test_X)\n",
    "print(yhat.shape,test_X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "id": "f5b552e4",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "      <th>4</th>\n",
       "      <th>5</th>\n",
       "      <th>6</th>\n",
       "      <th>7</th>\n",
       "      <th>8</th>\n",
       "      <th>9</th>\n",
       "      <th>10</th>\n",
       "      <th>11</th>\n",
       "      <th>12</th>\n",
       "      <th>13</th>\n",
       "      <th>14</th>\n",
       "      <th>15</th>\n",
       "      <th>16</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.655857</td>\n",
       "      <td>0.636364</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.663014</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.166667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.00000</td>\n",
       "      <td>0.785714</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.875000</td>\n",
       "      <td>0.875000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.863049</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.665753</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.333333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.34375</td>\n",
       "      <td>0.864286</td>\n",
       "      <td>0.909615</td>\n",
       "      <td>0.525000</td>\n",
       "      <td>0.525000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.791418</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.033333</td>\n",
       "      <td>0.668493</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.41250</td>\n",
       "      <td>0.857143</td>\n",
       "      <td>0.898077</td>\n",
       "      <td>0.525000</td>\n",
       "      <td>0.525000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>0.922155</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.066667</td>\n",
       "      <td>0.671233</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.34375</td>\n",
       "      <td>0.867857</td>\n",
       "      <td>0.905769</td>\n",
       "      <td>0.525000</td>\n",
       "      <td>0.525000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.930974</td>\n",
       "      <td>0.727273</td>\n",
       "      <td>0.100000</td>\n",
       "      <td>0.673973</td>\n",
       "      <td>0.653846</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.23125</td>\n",
       "      <td>0.860714</td>\n",
       "      <td>0.898077</td>\n",
       "      <td>0.587500</td>\n",
       "      <td>0.587500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>86</th>\n",
       "      <td>0.855582</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.800000</td>\n",
       "      <td>0.898630</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.500000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.11250</td>\n",
       "      <td>0.594643</td>\n",
       "      <td>0.569231</td>\n",
       "      <td>0.634375</td>\n",
       "      <td>0.634375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>87</th>\n",
       "      <td>0.838056</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>0.901370</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.666667</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.12500</td>\n",
       "      <td>0.564286</td>\n",
       "      <td>0.513462</td>\n",
       "      <td>0.262500</td>\n",
       "      <td>0.262500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>88</th>\n",
       "      <td>0.844167</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.866667</td>\n",
       "      <td>0.904110</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>0.833333</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.12500</td>\n",
       "      <td>0.487500</td>\n",
       "      <td>0.473077</td>\n",
       "      <td>0.525000</td>\n",
       "      <td>0.525000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>0.828404</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.900000</td>\n",
       "      <td>0.906849</td>\n",
       "      <td>0.884615</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.01875</td>\n",
       "      <td>0.407143</td>\n",
       "      <td>0.403846</td>\n",
       "      <td>0.634375</td>\n",
       "      <td>0.634375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>90</th>\n",
       "      <td>0.812704</td>\n",
       "      <td>0.909091</td>\n",
       "      <td>0.933333</td>\n",
       "      <td>0.909589</td>\n",
       "      <td>0.903846</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.000000</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.0</td>\n",
       "      <td>0.10625</td>\n",
       "      <td>0.430357</td>\n",
       "      <td>0.409615</td>\n",
       "      <td>0.262500</td>\n",
       "      <td>0.262500</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>91 rows × 17 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3         4         5         6    7   \\\n",
       "0   0.655857  0.636364  1.000000  0.663014  0.653846  0.166667  0.666667  0.0   \n",
       "1   0.863049  0.727273  0.000000  0.665753  0.653846  0.333333  0.666667  1.0   \n",
       "2   0.791418  0.727273  0.033333  0.668493  0.653846  0.500000  0.666667  0.0   \n",
       "3   0.922155  0.727273  0.066667  0.671233  0.653846  0.666667  0.666667  0.0   \n",
       "4   0.930974  0.727273  0.100000  0.673973  0.653846  0.833333  0.666667  0.0   \n",
       "..       ...       ...       ...       ...       ...       ...       ...  ...   \n",
       "86  0.855582  0.909091  0.800000  0.898630  0.884615  0.500000  1.000000  0.0   \n",
       "87  0.838056  0.909091  0.833333  0.901370  0.884615  0.666667  1.000000  0.0   \n",
       "88  0.844167  0.909091  0.866667  0.904110  0.884615  0.833333  1.000000  0.0   \n",
       "89  0.828404  0.909091  0.900000  0.906849  0.884615  1.000000  1.000000  0.0   \n",
       "90  0.812704  0.909091  0.933333  0.909589  0.903846  0.000000  1.000000  0.0   \n",
       "\n",
       "     8    9    10   11       12        13        14        15        16  \n",
       "0   1.0  0.0  0.0  0.0  1.00000  0.785714  0.884615  0.875000  0.875000  \n",
       "1   0.0  0.0  0.0  0.0  0.34375  0.864286  0.909615  0.525000  0.525000  \n",
       "2   0.0  0.0  0.0  0.0  0.41250  0.857143  0.898077  0.525000  0.525000  \n",
       "3   0.0  0.0  0.0  0.0  0.34375  0.867857  0.905769  0.525000  0.525000  \n",
       "4   0.0  0.0  0.0  1.0  0.23125  0.860714  0.898077  0.587500  0.587500  \n",
       "..  ...  ...  ...  ...      ...       ...       ...       ...       ...  \n",
       "86  0.0  0.0  0.0  0.0  0.11250  0.594643  0.569231  0.634375  0.634375  \n",
       "87  0.0  0.0  0.0  0.0  0.12500  0.564286  0.513462  0.262500  0.262500  \n",
       "88  0.0  0.0  0.0  1.0  0.12500  0.487500  0.473077  0.525000  0.525000  \n",
       "89  0.0  0.0  0.0  1.0  0.01875  0.407143  0.403846  0.634375  0.634375  \n",
       "90  0.0  0.0  0.0  0.0  0.10625  0.430357  0.409615  0.262500  0.262500  \n",
       "\n",
       "[91 rows x 17 columns]"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "test_X[0]=yhat\n",
    "test_X"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "id": "02cb65cc",
   "metadata": {},
   "outputs": [],
   "source": [
    "inv_yhat = scaler.inverse_transform(test_X)\n",
    "inv_yhat = inv_yhat[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "id": "887968dc",
   "metadata": {},
   "outputs": [],
   "source": [
    "# invert scaling for actual\n",
    "test_y = test_y.reshape((len(test_y), 1))\n",
    "test_X[0]=test_y\n",
    "inv_y = scaler.inverse_transform(test_X)\n",
    "inv_y = inv_y[:,0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "id": "64783e5b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Test Score: 13856.568\n"
     ]
    }
   ],
   "source": [
    "# calculate RMSE\n",
    "from math import sqrt\n",
    "#trainScore = sqrt(mean_squared_error(train_y[0], inv_yhat[0]))\n",
    "#print('Train Score: %.3f RMSE' % (trainScore))\n",
    "rmse2 = sqrt(mean_squared_error(inv_y, inv_yhat))\n",
    "print('Test Score: %.3f' % rmse2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "id": "1c22321c",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 96178.54 ,  85958.28 , 104856.62 , 105046.13 , 101946.05 ,\n",
       "        99299.15 , 104747.03 ,  42587.543, 108876.43 , 107506.2  ,\n",
       "       107083.17 ,  98535.14 ,  76972.98 ,  84183.77 ,  97322.414,\n",
       "       105006.95 , 105600.164, 105199.625, 102586.766,  98552.734,\n",
       "       106463.72 , 104703.51 , 105195.445, 105720.05 , 104552.33 ,\n",
       "       103317.14 , 102804.67 , 104933.26 , 103046.4  ,  80239.24 ,\n",
       "        45351.934,  48176.355,  59212.508,  81838.49 ,  92019.195,\n",
       "        94909.555,  96903.43 , 101195.13 , 100791.27 , 103012.484,\n",
       "        96879.586, 103118.3  , 100882.8  , 104856.66 ,  97584.05 ,\n",
       "        99830.59 ,  93172.42 ,  94776.95 , 100252.664,  96747.73 ,\n",
       "       101210.93 , 103190.87 ,  99130.09 , 101264.086,  92155.09 ,\n",
       "        90497.164,  96948.734,  98630.21 , 101191.78 ,  93853.36 ,\n",
       "        95504.44 ,  90021.26 ,  93596.08 ,  95920.49 , 100159.25 ,\n",
       "       101408.71 ,  99984.26 ,  99919.68 ,  94172.805,  68525.95 ,\n",
       "        97391.64 ,  96375.36 ,  97751.64 , 101655.055,  98628.02 ,\n",
       "        92672.73 ,  95485.12 ,  92132.86 ,  98762.95 , 100635.1  ,\n",
       "        47636.414,  54830.49 ,  95537.516,  92258.75 ,  95082.62 ,\n",
       "        97860.38 ,  94921.31 ,  95399.21 ,  94366.5  ,  89774.21 ,\n",
       "        90599.11 ], dtype=float32)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_y"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "id": "227db62c",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "91 91\n"
     ]
    }
   ],
   "source": [
    "print(len(inv_y),len(inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "id": "a388d8c6",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 76535.97 , 100713.62 ,  92354.83 , 107610.71 , 108639.836,\n",
       "       106926.12 , 104836.75 , 108833.516,  58042.605, 111466.89 ,\n",
       "       109941.54 , 110845.16 , 103243.125,  86277.02 ,  91554.53 ,\n",
       "       101920.74 , 107782.125, 107806.36 , 109017.64 , 107246.91 ,\n",
       "       103867.27 , 109806.02 , 107682.03 , 107626.66 , 107229.914,\n",
       "       107021.97 , 106573.016, 106726.08 , 108219.82 , 105926.3  ,\n",
       "        79437.836,  54042.945,  61968.145,  70255.79 ,  89813.74 ,\n",
       "        97813.3  ,  98969.49 , 100032.836, 103628.49 , 103888.68 ,\n",
       "       106246.805, 101337.06 , 105980.3  , 104361.93 , 107358.58 ,\n",
       "       100121.445, 103901.72 ,  97248.4  ,  99387.76 , 104030.37 ,\n",
       "        99838.305, 103584.86 , 104928.516, 102871.41 , 103869.305,\n",
       "        96170.58 ,  95014.1  ,  99401.34 ,  99971.63 , 102408.766,\n",
       "        96255.29 ,  95818.87 ,  95074.4  ,  99181.43 ,  99886.19 ,\n",
       "       102981.734, 103317.164, 104647.19 , 104411.875,  99248.09 ,\n",
       "        78957.89 , 100911.58 ,  99357.71 , 100659.086, 105608.68 ,\n",
       "       103019.08 ,  98495.086, 100032.51 ,  96932.97 , 101363.45 ,\n",
       "       102594.92 ,  61228.16 ,  66826.47 ,  99606.02 ,  96572.82 ,\n",
       "        98271.04 ,  99842.24 ,  97797.055,  98510.23 ,  96670.77 ,\n",
       "        94838.75 ], dtype=float32)"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "inv_yhat"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "id": "3314d790",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MAPE: 0.104413085\n"
     ]
    }
   ],
   "source": [
    "import numpy as np\n",
    "from sklearn import metrics\n",
    "def mape(y_true, y_pred):\n",
    "    return np.mean(np.abs((y_pred - y_true) / y_true))\n",
    "print('MAPE:',mape(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "id": "1f9a9a20",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "R2-score: -0.013825202264190928\n"
     ]
    }
   ],
   "source": [
    "from sklearn.metrics import r2_score\n",
    "print('R2-score:',r2_score(inv_y, inv_yhat))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "id": "27b1d1c5",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x222c9d6cd30>]"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(inv_yhat,'r')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "id": "334e9396",
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "inv_yhat=pd.DataFrame(data=inv_yhat)\n",
    "inv_yhat.to_csv('inv_y.csv')\n",
    "inv_yhat.to_csv('da01min_pre.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "776d1290",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
